import {Util} from "@lowcode/jpaas-base-lib";

/**
 * 页面定制公共事件
 */

export default {
    mounted(){
        let self=this;
        /**
         * 页面定制公共事件
         */
        this.$bus.on('formCustomViewEvent',  (conf)=> {
            self.handEvent(conf);
        });

        /**
         * 自定义的事件
         */
        this.$bus.on('formCustomPublicEvent',  (conf)=> {
            conf.type = "custom";
            self.handEvent(conf);
        });
    },
    beforeUnmount() {
        //销毁事件
        this.$bus.off("formCustomViewEvent");
        this.$bus.off("formCustomPublicEvent");
    },
    methods: {
        handEvent(conf){
            if(this.mode=='classics'){
                this.handEventClassics(conf)
            }else {
               this.handEventDrag(conf)
            }
        },
        /**
         * 处理简单布局的事件
         */
        handEventClassics(conf){
            for(let item in this.allModel){
                if(!this.allModel[item].selectModel){
                    return
                }
                let layout=this.allModel[item].selectModel;
                if(!this.$refs[layout.config.alias]){
                    return;
                }
                let control=this.$refs[layout.config.alias];
                //触发组件中的公共事件
                if(control  && control.handPublicReceive){
                    control.handPublicEvent(conf);
                }
            }

        },
        /**
         * 处理拖拽布局的事件
         */
        handEventDrag (conf){
            for (let i = 0; i < this.layout.length; i++) {
                let layout=this.layout[i];
                if(!layout.config){
                    return;
                }
                if(!this.$refs[layout.id]){
                    return;
                }
                let control=this.$refs[layout.id][0];
                //触发组件中的公共事件
                if(control && control.$refs[layout.config.alias] && control.$refs[layout.config.alias].handPublicReceive){
                    //tab容器时需要触发控件内的组件事件
                    if(layout.defConf == "tabContainer"){
                        control.$refs[layout.config.alias].handPublicReceive(conf);
                    }else {
                        control.$refs[layout.config.alias].handPublicEvent(conf);
                    }
                }
            }
        }
    }
}
